<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function Animal() {
        this.name = "john";
        this.colors = ["red", "yellow"];
      }
      Animal.prototype.getColor = function () {
        return this.colors;
      };
      function Dog() {}
      Dog.prototype = new Animal();

      // 原型链继承  子类的原型对象 是 父类的实例

      var dog1 = new Dog();
      console.log(dog1.colors, dog1.name); // ['red','yellow'] 'john'
      // 缺陷
      dog1.colors.push("black");
      dog1.name = "张三"; // 这句代码 只是 修改了 dog1 自身的 属性,没有 修改原型对象
      // 获取时,自身没有,就到原型上 找
      // 但是赋值时,有则修改,无则添加
      var dog2 = new Dog();
      console.log(dog2.colors, dog2.name); //  ["red", "yellow", "black"] 'john'

      console.log(dog1, dog2); // {name:'张三'}  {}
      // 因为 子类实例 共用 的 原型对象 是 父类的实例
      // 其中引用数据类型会相互影响 为什么基本数据无影响?

      // 子类在实例化的过程当中 没有办法 给 父类 传参
    </script>
  </body>
</html>
